package com.studynotes.dev.tech.controller.admin;

import com.studynotes.dev.tech.common.api.ApiResult;
import com.studynotes.dev.tech.common.utils.ValidateUtil;
import com.studynotes.dev.tech.model.dto.dataSourceLinkConfig.DataSourceLinkConfigCreate;
import com.studynotes.dev.tech.model.dto.dataSourceLinkConfig.DataSourceLinkConfigQuery;
import com.studynotes.dev.tech.model.dto.dataSourceLinkConfig.DataSourceLinkConfigUpdate;
import com.studynotes.dev.tech.model.vo.dataSourceLinkConfig.DataSourceLinkConfigView;
import com.studynotes.dev.tech.service.DataSourceLinkConfigService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @author Liu XiaoJun
 * @description: 数据源链接配置 前端控制器
 * @date 2025-11-07 13:17:48
 */
@RestController
@RequestMapping("/admin/data/source/link/config")
@Tag(name = "管理后台 - 数据源链接配置")
public class AdminDataSourceLinkConfigController {

    /**
     * 数据源链接配置服务
     */
    @Autowired
    private DataSourceLinkConfigService dataSourceLinkConfigService;

    /**
     * Create
     *
     * @param data 数据源链接配置新增数据传输对象
     * @return 数据源链接配置视图对象
     */
    @PostMapping("/")
    @Operation(summary = "新增", description = "新增数据源链接配置")
    public ApiResult<DataSourceLinkConfigView> createData(@RequestBody DataSourceLinkConfigCreate data) {
        ValidateUtil.validateEntity(data);
        return ApiResult.ok(dataSourceLinkConfigService.create(data));
    }

    /**
     * Update
     *
     * @param dbLinkKey Spring注入DS的ID
     * @param data 数据源链接配置更新数据传输对象
     * @return 数据源链接配置视图对象
     */
    @PutMapping("/{dbLinkKey}")
    @Operation(summary = "修改", description = "修改数据源链接配置")
    public ApiResult<DataSourceLinkConfigView> updateData(@Parameter(hidden = true) @PathVariable("dbLinkKey") String dbLinkKey, @RequestBody DataSourceLinkConfigUpdate data) {
        ValidateUtil.validateEntity(data);
        return ApiResult.ok(dataSourceLinkConfigService.update(dbLinkKey, data));
    }

    /**
     * Get
     *
     * @param dbLinkKey Spring注入DS的ID
     * @return 数据源链接配置视图对象
     */
    @GetMapping("/{dbLinkKey}")
    @Operation(summary = "详情", description = "通过主键获取数据源链接配置")
    public ApiResult<DataSourceLinkConfigView> getData(@Parameter(hidden = true) @PathVariable("dbLinkKey") String dbLinkKey)
    {
        return ApiResult.ok(dataSourceLinkConfigService.get(dbLinkKey));
    }

    /**
     * Delete
     *
     * @param id 主键
     * @return data：1 删除成功，data：0 删除失败
     */
    @DeleteMapping("/{dbLinkKey}")
    @Operation(summary = "删除", description = "删除数据源链接配置")
    public ApiResult<Boolean> deleteData(@Parameter(hidden = true) @PathVariable("dbLinkKey") String dbLinkKey)
    {
        return ApiResult.ok(dataSourceLinkConfigService.delete(dbLinkKey));
    }


    /**
     * Page
     *
     * @param data 数据源链接配置查询数据传输对象
     * @return 数据源链接配置视图对象列表
     */
    @GetMapping("/")
    @Operation(summary = "查询列表", description = "查询数据源链接配置列表")
    public ApiResult<List<DataSourceLinkConfigView>> findAllData(DataSourceLinkConfigQuery data)
    {
        ValidateUtil.validateEntity(data);
        return ApiResult.ok(dataSourceLinkConfigService.queryList(data));
    }


}
